#include <iostream>

///////////////////////////
/// \brief The CameraParam class
/// 本例将展示一个单例参数类
/// 简便起见，该参数类只有一个曝光参数
class CameraParam{
public:
    //用于获取类实例的静态方法
    static CameraParam* get_instance();
    //设置和获取曝光参数
    bool set_exposure(int _exposure);
    int get_exposure();

private:
    //隐藏构造函数以预防任何的外部的实例化
    CameraParam(){}
    //曝光参数
    int exposure_;
    //静态实例
    // 本实例只能为指针，不然会造成编译问题
    static CameraParam* instance_;
};

//内部静态实例初始化
CameraParam* CameraParam::instance_ = nullptr;
//获取实例方法实现
CameraParam* CameraParam::get_instance(){
    if(instance_ == nullptr){
        instance_ = new CameraParam();
    }
    return instance_;
}

bool CameraParam::set_exposure(int _exposure){
    if(_exposure < 0 || _exposure > 1000)
        return false;
    exposure_ = _exposure;
}

int CameraParam::get_exposure(){
    return exposure_;
}

int main(){
    //调用该静态方法以获取实例
    CameraParam* param = CameraParam::get_instance();
    // 对实例进行操作
    param->set_exposure(100);
    int exposure = param->get_exposure();
    std::cout << "exposure is " << exposure << std::endl;
    return 0;
}
